export interface IQueue<T> {
  enQueue(item: T): void; // 入队
  deQueue(): T | undefined; // 出队
  isEmpty(): boolean; // 判断是否为空
  peek(): T; // 查看队首元素
  size(): number; // 获取队列长度
  toString(): string; // 获取队列字符串
  clear(): void; // 清空队列
}

export default class ArrayQueue<T> implements IQueue<T> {
  protected data: T[] = [];
  constructor(data?: T[]) {
    this.data = data || [];
  }
  enQueue(item: T) {
    this.data.push(item);
  }
  deQueue() {
    if (!this.isEmpty()) {
      return this.data.shift();
    }
  }
  toString() {
    return String(this.data);
  }
  size() {
    return this.data.length;
  }
  isEmpty() {
    return this.data.length === 0;
  }
  peek() {
    return this.data[this.data.length - 1];
  }
  clear() {
    this.data = [];
  }
}

// const queue1 = new ArrayQueue<number>();

// queue1.enQueue(1);
// queue1.enQueue(2);
// queue1.enQueue(3);
// console.log(queue1.toString());
// queue1.deQueue();
// console.log(queue1.toString());

export {};
